package com.ds.infra.rpc.core.protocol;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.util.Arrays;

/**
 * RPC请求体定义
 *
 * @author WeiShaoying
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RpcRequest implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 请求ID（UUID）
     */
    private String requestId;

    /**
     * 服务接口全限定名
     */
    private String className;

    /**
     * 方法名
     */
    private String methodName;

    /**
     * 方法参数类型列表
     */
    private Class<?>[] parameterTypes;

    /**
     * 方法参数值
     */
    private Object[] parameters;

    /**
     * 服务版本号（用于多版本支持）
     */
    private String version;

    @Override
    public String toString() {
        return "RpcRequest{" +
                "requestId='" + requestId + '\'' +
                ", className='" + className + '\'' +
                ", methodName='" + methodName + '\'' +
                ", parameterTypes=" + Arrays.toString(parameterTypes) +
                ", version='" + version + '\'' +
                '}';
    }
}
